package org.javaboy.websocket_demo.ws;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jms.artemis.ArtemisProperties;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RequestMapping;

import java.security.Principal;

@Controller
public class GreetingController {

    @Autowired
    SimpMessagingTemplate messagingTemplate;

    /**
     * 这个相当于就是一个接口方法，前端网页发送来的 websocket 消息，就发送给这个接口
     *
     * @MessageMapping("/greeting") 表示接口的地址是 /greeting，即前端发送消息的时候，发送给 /greeting 接口
     * <p>
     * message 参数就是前端传过来的消息的 JSON 数据所封装成的对象
     */
    @MessageMapping("/greeting")
    //这个表示将当前方法的返回值，发送给所有人，凡是连接上当前服务端的浏览器，都会订阅 /topic/greeting 地址，就可以在这个地址中收到消息了
    @SendTo("/topic/greeting")
    public Message greeting(Message message) {
        System.out.println("message = " + message);
        return message;
//        messagingTemplate.convertAndSend("/topic/greeting", message);
    }

    /**
     * @param principal 调用当前接口的用户
     * @param message2
     */
    @MessageMapping("/chat")
    public void chat(Principal principal, Message2 message2) {
        //获取当前登录用户名
        String name = principal.getName();
        message2.setFrom(name);
        //给指定用户发送消息
        messagingTemplate.convertAndSendToUser(message2.getTo(), "/queue/chat", message2);
    }

}
